In [8]:
import folium
import numpy as np
from sklearn.cluster import KMeans
from folium.plugins import MousePosition

#load the map
m = folium.Map(location=[37.7749,-122.4194], zoom_start=12, 
               tiles='Stamen Terrain') 
data = {
        'latitude': list(df5["latitudes"]),
        'longitude': list(df5["longitude"])}
df = pd.DataFrame(data)
for index, row in df.iterrows():
    folium.CircleMarker([row['latitude'], row['longitude']], 
                        radius=0.00001,color='red', fill_color='red', 
                        fill_opacity=10).add_to(m)

#k-means
X = df5[["latitudes","longitude"]]
kmeans = KMeans(n_clusters=10, random_state=42)
kmeans.fit(X)
centroids = kmeans.cluster_centers_

# different shapes of centroids
MousePosition(position='bottomleft', separator=' | ').add_to(m)
folium.Marker(location=[centroids[0][0], centroids[0][1]],
              icon=folium.Icon(icon = "flag",color='blue')).add_to(m)
folium.Marker(location=[centroids[6][0], centroids[6][1]],
              icon=folium.Icon(icon = "flag",color='blue')).add_to(m)
folium.Marker(location=[centroids[8][0], centroids[8][1]],
              icon=folium.Icon(icon = "flag",color='blue')).add_to(m)
folium.Marker(location=[centroids[3][0], centroids[3][1]],
              icon=folium.Icon(icon = "flag",color='blue'),popup='Centroids 1').add_to(m)

folium.Marker(location=[centroids[2][0], centroids[2][1]],
              icon=folium.Icon(icon = "star",color='green')).add_to(m)
folium.Marker(location=[centroids[9][0], centroids[9][1]],
              icon=folium.Icon(icon = "star",color='green')).add_to(m)
folium.Marker(location=[centroids[1][0], centroids[1][1]],
              icon=folium.Icon(icon = "star",color='green')).add_to(m)

folium.Marker(location=[centroids[5][0], centroids[5][1]],
              icon=folium.Icon(icon = "cloud",color='gray')).add_to(m)
folium.Marker(location=[centroids[4][0], centroids[4][1]],
              icon=folium.Icon(icon = "cloud",color='gray')).add_to(m)

folium.Marker(location=[centroids[7][0], centroids[7][1]],
              icon=folium.Icon(icon = "play",color='green')).add_to(m)

# show the map
m
Out[8]:
Make this Notebook Trusted to load map: File -> Trust Notebook
In [9]:
#define a centroid in different year
def centroids(time1,time2):
    df6 = df5[(df5['Date']  <=  time1) &( df5['Date']  >=  time2)]
    X = df6[["latitudes","longitude"]]
    kmeans = KMeans(n_clusters=10, random_state=42)
    kmeans.fit(X)
    centroids = kmeans.cluster_centers_
   
    return centroids[3]
In [10]:
time1 = ["2003-12-31","2004-12-31","2005-12-31","2006-12-31",
         "2007-12-31","2008-12-31","2009-12-31","2010-12-31",
         "2011-12-31","2012-12-31","2013-12-31","2014-12-31",
         "2015-12-31","2016-12-31","2017-12-31"]
time2 = ["2003-01-01","2004-01-01","2005-01-01","2006-01-01",
         "2007-01-01","2008-01-01","2009-01-01","2010-01-01",
         "2011-01-01","2012-01-01","2013-01-01","2014-01-01",
         "2015-01-01","2016-01-01","2017-01-01"]

# separate latitude and logitude based on years
list_centroid_lat = []
list_centroid_log = []
for i in range(len(time1)):
    a = centroids(time1[i],time2[i])[0]
    list_centroid_lat = np.append(list_centroid_lat,a)
    b = centroids(time1[i],time2[i])[1]
    list_centroid_log= np.append(list_centroid_log,b)
In [11]:
import plotly.graph_objs as go
from plotly.subplots import make_subplots
import plotly.offline as pyo


x = [2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017]
y1 = list_centroid_lat
y2 = list_centroid_log


fig = make_subplots(rows=1, cols=2, shared_xaxes=True, vertical_spacing=0.03)

# add the first and seconf line 
fig.add_trace(go.Scatter(x=x, y=y1, mode='lines+markers', name='Line 1'), row=1, col=1)
fig.add_trace(go.Scatter(x=x, y=y2, mode='lines+markers', name='Line 2'), row=1, col=2)

# update the scope of x and y 
fig.update_yaxes(title_text="latitude",range=[37.5, 38], row=1, col=1)
fig.update_yaxes(title_text='longitude',range=[-122.52, -122.32], row=1, col=2)

fig.update_layout(title='Changes of longitude and latitude coordinates of one fire cluster center from 2003 to 2017',
                  xaxis=dict(
        title='Years From 2013 to 2017',
        
    ))


# pyo.plot(fig, filename='two_lines_chart.html')
fig.show()
In [ ]: